﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using Infragistics.Excel;

namespace Warehouse_Management.Import
{
    public partial class frmImportDanhMuc : DevExpress.XtraEditors.XtraForm
    {
        public frmImportDanhMuc()
        {
            InitializeComponent();
        }

        //public IList<Hang> listHang = new List<Hang>();
        public DataTable dtHangHoa = new DataTable();
        public IList<Hang> listHangNew = new List<Hang>();

        private void txtFilePath_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog(this);
            txtFilePath.Text = openFileDialog1.FileName;
        }

        private void btnThucHien_Click(object sender, EventArgs e)
        {
            int beginRow = Convert.ToInt32(txtDongBatDau.EditValue) - 1;
            if (beginRow < 0)
            {
                error.SetError(txtDongBatDau, "Dòng bắt đầu phải lớn hơn 0");
                return;

            }
            #region mở kết nối 
            
            Workbook wb = new Workbook();

            Worksheet ws = null;
            try
            {
                wb = Workbook.Load(txtFilePath.Text, true);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
            try
            {
                ws = wb.Worksheets[txtsheet.Text];
            }
            catch
            {
                MessageBox.Show("Không tồn tại sheet \"" + txtsheet.Text + "\"MSG_EXC01");
                return;
            }
            #endregion
            #region
             WorksheetRowCollection wsrc = ws.Rows;
            char maHangColumn = Convert.ToChar(txtMaHang.Text);
            int maHangCol = ConvertCharToInt(maHangColumn);
            char tenHangColumn = Convert.ToChar(txtTenHang.Text);
            int tenHangCol = ConvertCharToInt(tenHangColumn);
            char GhiChuColumn = Convert.ToChar(txtGhiChu.Text);
            int GhiChuCol = ConvertCharToInt(GhiChuColumn);
            char dvtColumn = Convert.ToChar(txtDVT.Text);
            int dvtCol = ConvertCharToInt(dvtColumn);
            foreach (WorksheetRow wsr in wsrc)
            {
                if (wsr.Index >= beginRow)
                {
                    try
                    {
                        Hang hang = new Hang();
                        hang.Barcode = Convert.ToString(wsr.Cells[maHangCol].Value).Trim();
                        hang.TenHang = Convert.ToString(wsr.Cells[tenHangCol].Value).Trim();
                        hang.DVT_ID = Convert.ToString(wsr.Cells[dvtCol].Value).Trim();
                        hang.GhiChu = Convert.ToString(wsr.Cells[GhiChuCol].Value).Trim();

                        if (string.IsNullOrEmpty(hang.Barcode))
                        {
                            DialogResult dsresult = MessageBox.Show("Mã barcode của hàng tại dòng : " + (wsr.Index + 1) + "rỗng nên được bỏ qua. Bạn có muốn tiếp tục không ?", "Thông báo ", MessageBoxButtons.YesNoCancel);
                            if (dsresult == DialogResult.Yes)
                                continue;
                            else if (dsresult == DialogResult.No)
                                break;
                            else
                                return;
                        }
                        try
                        {
                            hang.DVT_ID = Global.getDVT(Convert.ToString(wsr.Cells[dvtCol].Value).ToUpper());
                            if(string.IsNullOrEmpty(hang.DVT_ID))
                                if (MessageBox.Show("Đơn vị tính : " + Convert.ToString(wsr.Cells[dvtCol].Value).ToUpper() + " của hàng thứ : " + (wsr.Index + 1) + " không có trong hệ thống nên sẽ được bỏ qua. Bạn có muốn tiếp tục không ?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                                    continue;
                        }
                        catch
                        {
                            if (MessageBox.Show("Đơn vị tính : " + Convert.ToString(wsr.Cells[dvtCol].Value).ToUpper() + " của hàng thứ : " + (wsr.Index + 1) + " không có trong hệ thống nên sẽ được bỏ qua. Bạn có muốn tiếp tục không ?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                                continue;
                            else
                                break;
                        }
                        if (checkHangExit(hang.Barcode) >= 0)
                        {
                            //  if (ShowMessage("Nguyên phụ liệu có mã \"" + npl.Ma + "\" thuộc dòng " + (wsr.Index + 1) + " trong file Excel đã có trên lưới. Bạn có muốn thay thế nguyên phụ liệu trên lưới bằng sản phẩm này?", true) == "Yes")
                            if (MessageBox.Show("Hàng có mã \"" + hang.Barcode + "\" thuộc dòng " + (wsr.Index + 1) + " trong file Excel đã có trên hệ thống. Bạn có muốn tiếp tục?", "Thong Bao", MessageBoxButtons.YesNo) == DialogResult.Yes)
                                continue;
                            else
                                break;
                        }
                        else this.listHangNew.Add(hang);
                    }
                    catch (Exception ex)
                    {
                        // if (ShowMessage("Dữ liệu ở dòng " + (wsr.Index + 1) + " không hợp lệ.\nBạn có muốn tiếp tục không?", true) != "Yes") 
                        MessageBox.Show("Dữ liệu ở dòng " + (wsr.Index + 1) + " không hợp lệ.\n Không thể tiếp tục import dữ liệu, lỗi :"+ex.Message, "Thong Bao", MessageBoxButtons.OK);
                    }
                }
            }
            MessageBox.Show("Đã import xong, vui lòng kiểm tra lại dữ liệu");
            this.Close();
            #endregion
        }
        private int ConvertCharToInt(char ch)
        {
            return ch - 'A';
        }
        private int checkHangExit(string barcode)
        {
//             for (int i = 0; i < this.listHang.Count; i++)
//             {
//                 if (this.listHang[i].Barcode.ToUpper() == barcode.ToUpper()) return i;
//             }
            DataRow[] dr =  dtHangHoa.Select("Barcode = " + barcode);
            if (dr.Length > 0)
            {
                return 0;
            }
            for (int i = 0; i < this.listHangNew.Count; i++)
            {
                if (this.listHangNew[i].Barcode.ToUpper() == barcode.ToUpper()) return i;
            }
            return -1;
        }
    }
}